﻿-------------------------------------------------------------------------------------------------------------
-----------------------------------------pca_caja.subgrupos_movimiento---------------------------------------
-------------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_caja.fn_add_subgrupo_movimiento(bigint,--grupo_movimiento_id $1
							       varchar,--empresa_id $2
							       varchar,--oficina_id $3
							       bigint,--sesion_id $4
							       varchar,--codigo $5
							       varchar --nombre $6
							       )RETURNS bigint AS
$$
BEGIN
	INSERT INTO pca_caja.subgrupos_movimiento 
		(grupo_movimiento_id,
		empresa_id,
		oficina_id,
		sesion_id,
		codigo,
		nombre)
	VALUES
		($1,$2,$3,$4,$5,$6);

	RETURN  pca_global.fn_pseudo_encrypt_bigint(currval(' pca_caja.seq_subgrupo_movimiento_id')::integer);
EXCEPTION
	WHEN SQLSTATE '23503' THEN
		RAISE EXCEPTION 'Error al procesar solicitud, posiblemente el grupo ya no existe en la base de datos :(';
	WHEN SQLSTATE '23505' THEN
		RAISE EXCEPTION 'Codigo "%" ya existe',$5;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_caja.fn_update_subgrupo_movimiento(bigint,--subgrupo_movimiento_id $1
								  bigint,--grupo_movimiento_id $2
								  varchar,--empresa_id $3
								  varchar,--oficina_id $4
								  bigint,--sesion_id $5
								  varchar,--codigo $6
								  varchar --nombre $7
							          )RETURNS void AS
$$
BEGIN
	UPDATE pca_caja.subgrupos_movimiento SET
		grupo_movimiento_id = $2,
		oficina_id = $4,
		sesion_id = $5,
		codigo = $6,
		nombre = $7
	WHERE
		subgrupo_movimiento_id = $1 AND
		empresa_id = $3;
EXCEPTION
	WHEN SQLSTATE '23505' THEN
		RAISE EXCEPTION 'Codigo "%" ya existe',$6;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_caja.fn_del_subgrupo_movimiento(bigint,--subgrupo_movimiento_id $1
							       varchar --empresa_id $2
							       )RETURNS void AS
$$
BEGIN
	DELETE FROM 
		pca_caja.subgrupos_movimiento 
	WHERE
		subgrupo_movimiento_id = $1 AND
		empresa_id = $2;
EXCEPTION
	WHEN OTHERS THEN
		RAISE EXCEPTION 'Error al eliminar sub grupo, posiblemente existen tablas relacionadas';
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_caja.fn_get_subgrupo_movimiento(bigint,--subgrupo_movimiento_id $1
							       varchar --empresa_id $2
							       )RETURNS SETOF pca_caja.subgrupos_movimiento AS
$$
DECLARE
	_row pca_caja.subgrupos_movimiento%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_caja.subgrupos_movimiento
		WHERE
			subgrupo_movimiento_id = $1 AND
			empresa_id = $2
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_caja.fn_get_list_subgrupos_movimiento(integer,--start $1
								    integer,--limit $2
								    bigint,--grupo_movimiento_id $3
								    varchar --empresa_id $4
								    )RETURNS SETOF refcursor AS
$$
DECLARE
	cursor_result refcursor;
	cursor_totalrows refcursor;
BEGIN
	OPEN cursor_result FOR
		SELECT
			*
		FROM
			pca_caja.subgrupos_movimiento
		WHERE
			grupo_movimiento_id = $3 AND
			empresa_id = $4
		ORDER BY
			nombre ASC LIMIT $2 OFFSET $1;
	RETURN NEXT cursor_result;

	OPEN cursor_totalrows FOR
		SELECT
			count(*)
		FROM
			pca_caja.subgrupos_movimiento
		WHERE
			grupo_movimiento_id = $3 AND
			empresa_id = $4;
	RETURN NEXT cursor_result;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_caja.fn_get_list_subgrupos_movimiento(integer,--start $1
								    integer,--limit $2
								    bigint,--grupo_movimiento_id $3
								    varchar,--empresa_id $4
								    varchar --query $5
								    )RETURNS SETOF refcursor AS
$$
DECLARE
	cursor_result refcursor;
	cursor_totalrows refcursor;
BEGIN
	OPEN cursor_result FOR
		SELECT
			*
		FROM
			pca_caja.subgrupos_movimiento
		WHERE
			grupo_movimiento_id = $3 AND
			empresa_id = $4 AND
			(lower(pca_global.fn_ascii(nombre)) LIKE '%'|| lower(pca_global.fn_ascii($5)) ||'%' OR
			lower(pca_global.fn_ascii(codigo)) LIKE '%'|| lower(pca_global.fn_ascii($5)) ||'%')
		ORDER BY
			nombre ASC LIMIT $2 OFFSET $1;
	RETURN NEXT cursor_result;

	OPEN cursor_totalrows FOR
		SELECT
			count(*)
		FROM
			pca_caja.subgrupos_movimiento
		WHERE
			grupo_movimiento_id = $3 AND
			empresa_id = $4 AND
			(lower(pca_global.fn_ascii(nombre)) LIKE '%'|| lower(pca_global.fn_ascii($5)) ||'%' OR
			lower(pca_global.fn_ascii(codigo)) LIKE '%'|| lower(pca_global.fn_ascii($5)) ||'%');
	RETURN NEXT cursor_result;
END;
$$
LANGUAGE plpgsql;